iT邦幫忙

2021 iThome 鐵人賽

0
Modern Web

尋覓網站開發的神兵利器系列 第 33

Extra02 - Ignore - 配置忽略的檔案與目錄

  • 分享至 

  • xImage
  •  

此篇為番外,未收入在本篇是因為 Ignore 並不是個工具,而是個會常被各種工具採用的一種配置方式。

Ignore 檔案用來排除匹配的檔案。

介紹 ignore 檔案

Ignore 檔案使用特定格式與通用字元來排除不想被特定工具處理的檔案或目錄。

以 git 的 .gitignore 為例,只要符合 ignore 檔案的設定,就會被 git 視為不用追蹤的檔案:

# Ignore any js file in directory `sample` with any depth
samples/**/*.js

如果在當前目錄中有個 .gitignore 的內容如上,那當前目錄內的 samples 目錄裡的任何階層目錄中以 .js 結為的檔案或目錄都會被排除在 git 的追蹤清單內。

Ignore 檔案的規則

每個工具在規定 ignore 檔案的規則時或多或少都有點不同,但主要都以 .gitignore 的規則處理,因此這裡會說明 .gitignore 的規則,使我們對於 ignore 檔案的規則有個認識。

規則列表如下:

  • 所有的空行都不會匹配任何檔案,可以將空行作為分隔以提高可讀性。
  • # 作為行開頭視為註解行,如果需要包含以 # 開頭的檔案或目錄,可以使用 \ 跳脫。例如: \#foo 會匹配 #foo 目錄或檔案。
  • 行中的空白會被忽略,以 \ 表示不忽略。例如: f\ o\ o 會匹配 f o o 目錄或檔案。
  • ! 作為行開頭會被視為不要忽略的檔案或目錄,如果要忽略以 ! 開頭的檔案或目錄,需要以 \ 跳脫。例如: !.gitignore 會將 .gitignore 檔案或目錄排除在忽略清單中,另外像是 \!important!.txt 則會將 !important!.txt 包含在忽略清單中。
  • 斜線 / 作為目錄區隔符號。
    • 在開頭或是中間(或是開頭與中間都)設定 / ,則會只會搜尋與 .gitignore 同層的目錄。例如: /foo 會對應 foo ,但不會對應 a/foo ,另外 foo/bar 會對應 foo/bar 但不會對應 a/foo/bar
    • 在結尾設定 / 則會尋找任意層的目錄,不會尋找檔案。例如 foo/ 只會搜尋目錄 foo 不會包含檔案 foo
  • * 與除了 / 外的所有字串相符。例如 *.js 會符合任意以 .js 結尾的檔案或目錄,另外 foo/* 會匹配目錄 foo 中所有的檔案及目錄。
  • ? 與除了 / 外的所有字元相符。例如 ?.js 符合 a.js 但不符合 sample.js
  • [a-zA-z] 是範圍符號,與範圍設定的相符。例如 [a-c].js 符合 b.js 但不符合 d.js
  • ** 依照擺放位置有不同的效果:
    • ** 後接著 / 表示任意層目錄。例如 **/foo 符合 fooa/foo
    • / 後接著 ** 並且位於尾端,表示此目錄下的所有檔案及目錄。例如 foo/** 會包含 foo 中所有的檔案及目錄,但不會包含 a/foo 的內容。
    • 位於兩個 / 之間擺放 ** 表示中間夾著零至多個目錄。例如 foo/**/sample.js 符合 foo/sample.jsfoo/bar/sample.jsfoo/bar/a/sample.js
    • 其他數量的 * 相連都依上列規則。
  • 行中沒有設定 / 則會找尋所有層級目錄中是否有符合的檔案及目錄。例如: foo 會符合 /fooa/foo

本文重點整理

  • 每個工具都會需要制定其包含的檔案範圍,雖然可以設定預設範圍,但不可能符合每個人的需求,因此就需要一個可以制定處理範圍的功能。
  • Ignore 檔案以簡單的格式搭配通用字元來表示各式的處理範圍,讓使用者可以精細地客製想要作用的範圍。
  • 大多數的 ignore 檔案都是依照 .gitignore 規格,因此理解了 .gitignore 寫法,就可以知道大部分的 ignore 檔案設定方式。
  • Ignore 檔案的設計,讓我們可以縮減各個工具的處理範圍,以達到更好的效率。

參考資料


上一篇
Extra01 - glob - 配置目標檔案與目錄
下一篇
Extra03 - Browserslist - 配置專案執行目標環境
系列文
尋覓網站開發的神兵利器40
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言